using Arrowgene.Ddon.GameServer.Dump;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Logging;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Ddon.Shared.Entity.Structure;

namespace Arrowgene.Ddon.GameServer.Handler
{
    public class MailSystemMailGetTextHandler : GameRequestPacketHandler<C2SMailSystemMailGetTextReq, S2CMailSystemMailGetTextRes>
    {
        private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(MailSystemMailGetTextHandler));

        public MailSystemMailGetTextHandler(DdonGameServer server) : base(server)
        {
        }

        public override S2CMailSystemMailGetTextRes Handle(GameClient client, C2SMailSystemMailGetTextReq request)
        {
            var pcap = new S2CMailSystemMailGetTextRes.Serializer().Read(pcap_data);

            var message = Server.Database.SelectSystemMailMessage(request.MailId);
            var attachments = Server.Database.SelectAttachmentsForSystemMail(request.MailId);

            Server.Database.UpdateSystemMailMessageState(request.MailId, MailState.Opened);

            var result = new S2CMailSystemMailGetTextRes()
            {
                MailId = request.MailId,
                MailTextInfo = new CDataMailTextInfo()
                {
                    Text = message.Body
                }
            };

            foreach (var attachment in attachments)
            {
                switch (attachment.AttachmentType)
                {
                    case SystemMailAttachmentType.Item:
                        result.MailTextInfo.MailAttachmentList.ItemList.Add(attachment.ToCDataMailItemInfo());
                        break;
                    case SystemMailAttachmentType.GP:
                        result.MailTextInfo.MailAttachmentList.GPList.Add(attachment.ToCDataMailGPInfo());
                        break;
                    case SystemMailAttachmentType.Course:
                        result.MailTextInfo.MailAttachmentList.OptionCourseList.Add(attachment.ToCDataMailOptionCourseInfo());
                        break;
                    case SystemMailAttachmentType.PawnLegend:
                        result.MailTextInfo.MailAttachmentList.LegendPawnList.Add(attachment.ToCDataMailLegendPawnInfo());
                        break;
                }
            }

            return result;
        }

        private byte[] pcap_data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xA8, 0x12, 0x8E, 0x01, 0x7C, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x92, 0xE3, 0x83, 0x97, 0xE3, 0x83, 0xAC, 0xE3, 0x82, 0xA4, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0xA0, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0xBE, 0xE3, 0x81, 0x97, 0xE3, 0x81, 0xA6, 0x0D, 0x0A, 0xE8, 0xAA, 0xA0, 0xE3, 0x81, 0xAB, 0xE3, 0x81, 0x82, 0xE3, 0x82, 0x8A, 0xE3, 0x81, 0x8C, 0xE3, 0x81, 0xA8, 0xE3, 0x81, 0x86, 0xE3, 0x81, 0x94, 0xE3, 0x81, 0x96, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0xBE, 0xE3, 0x81, 0x99, 0xE3, 0x80, 0x82, 0x0D, 0x0A, 0x0D, 0x0A, 0xE3, 0x81, 0x94, 0xE8, 0xB3, 0xBC, 0xE5, 0x85, 0xA5, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0x9F, 0xE3, 0x81, 0xA0, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0xA2, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x86, 0xE3, 0x83, 0xA0, 0xE3, 0x82, 0x92, 0xE3, 0x81, 0x8A, 0xE9, 0x80, 0x81, 0xE3, 0x82, 0x8A, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0x9F, 0xE3, 0x81, 0x97, 0xE3, 0x81, 0xBE, 0xE3, 0x81, 0x99, 0xE3, 0x80, 0x82, 0x0D, 0x0A, 0x0D, 0x0A, 0xE2, 0x96, 0xA0, 0x20, 0xE6, 0xB7, 0xBB, 0xE4, 0xBB, 0x98, 0x20, 0xE2, 0x96, 0xA0, 0x0D, 0x0A, 0xE7, 0x99, 0xBD, 0xE7, 0xAB, 0x9C, 0xE5, 0x8D, 0xB0, 0xE3, 0x81, 0xAE, 0xE9, 0x9C, 0x8A, 0xE8, 0x96, 0xAC, 0x20, 0x78, 0x20, 0x31, 0x30, 0x0D, 0x0A, 0xE7, 0x99, 0xBD, 0xE7, 0xAB, 0x9C, 0xE5, 0x8D, 0xB0, 0xE3, 0x82, 0xAC, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0xB9, 0x20, 0x78, 0x20, 0x31, 0x30, 0x0D, 0x0A, 0xE4, 0xB8, 0x87, 0xE8, 0x83, 0xBD, 0xE8, 0x96, 0xAC, 0x20, 0x78, 0x20, 0x31, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0xE4, 0xBB, 0x8A, 0xE5, 0xBE, 0x8C, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x82, 0xE3, 0x80, 0x8E, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x80, 0x8F, 0xE3, 0x82, 0x92, 0x0D, 0x0A, 0xE3, 0x82, 0x88, 0xE3, 0x82, 0x8D, 0xE3, 0x81, 0x97, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0x8A, 0xE9, 0xA1, 0x98, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0x9F, 0xE3, 0x81, 0x97, 0xE3, 0x81, 0xBE, 0xE3, 0x81, 0x99, 0xE3, 0x80, 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x9F, 0xBF, 0x4B, 0x86, 0x12 };
    }
}

